<template>
  <router-view />
</template>

<script setup lang="ts">
import { useRouter } from 'vue-router';
import { Storage } from './libs/utils';
import { checkLoginService } from './services/User';
import { useStorage } from './views/hooks/user';

const router = useRouter();
const { removeUserStorage } = useStorage();

//to即将要进入的目标 from当前导航正要离开的路由
router.beforeEach(async (to, from) => {
  const accessToken = Storage.get('access_token');
  //有token信息时
  if (accessToken) {
    const { err_code } = await checkLoginService();
    console.log(err_code);
    //情况5，当在首页而且已经成功登陆并且`localStorage`中有`token`信息时，点击退出登陆的操作会清除`localStorage`信息且强制回到登陆页。
    if (err_code && to.name === 'home') {
      //清空localStorage
      removeUserStorage();
      return { name: 'login' };
    }
    //情况2，当在首页而且已经成功登陆并且`localStorage`中有`token`信息时，试图从地址栏中输入`/login`跳转至登陆页的操作会强制回到首页。
    //情况3，当在首页而且已经成功登陆并且`localStorage`中有`token`信息时，试图从地址栏中输入`/register`跳转至注册页的操作会强制回到首页。
    if (!err_code && (to.name === 'login' || to.name === 'register')) {
      return { name: 'home' };
    }
    //情况1，当在登陆页面和`localStorage`中没有`token`信息时，试图从地址栏中输入`/`跳转至首页的操作会强制跳转至登陆页。
    // if (err_code && to.name === 'login') {
    //   removeUserStorage();
    // }
  } else {
    //没有token信息时
    //情况4，当在首页而且已经成功登陆但是`localStorage`中有`token`信息失效消失时，此时再次刷新页面会直接跳转至登陆页面。
    if (to.name !== 'login' && to.name !== 'register') {
      return { name: 'login' };
    }
  }
});
</script>